Git 合并冲突
如何将两个分支合并到一起。就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线。
e.g
# 本地处理冲突:
git fetch --all
git checkout temp-8f4fafc9-f-20220425-gcmxgz-test
git pull
git merge origin/test
# 处理冲突
git commit -am "fix: 解决冲突"
git push
检查冲突
git diff --check
merge 合并原理
合并的第一种方法 git merge
。在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。
这里准备了两个分支,每个分支上各有一个独有的提交。这意味着没有一个分支包含了我们修改的所有内容。咱们通过合并这两个分支来解决这个问题。
我们要把 bugFix
合并到 master
里
首先,master
现在指向了一个拥有两个父节点的提交记录。假如从 master
开始沿着箭头向上看,在到达起点的路上会经过所有的提交记录。这意味着 master
包含了对代码库的所有修改。
这时再把 master
分支合并到 bugFix
:
因为 master
继承自 bugFix
,Git 什么都不用做,只是简单地把 bugFix
移动到 master
所指向的那个提交记录。这表明每一个分支都包含了代码库的所有修改!
merge 合并流程
创建新分支
bugFix
用
git checkout bugFix
命令切换到该分支提交一次
用
git checkout master
切换回master
再提交一次
用
git merge
把bugFix
合并到master
git checkout -b bugFix
git commit
git checkout master
git commit
git merge bugFix
Rebase 合并原理
第二种合并分支的方法是 git rebase
。Rebase 实际上就是取出一系列的提交记录,“复制” 它们,然后在另外一个地方逐个的放下去。
还是准备了两个分支;注意当前所在的分支是 bugFix
(星号标识的是当前分支)
我们想要把 bugFix
分支里的工作直接移到 master
分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。
这里使用 git rebase
之后
# 注意这里的顺序不要反了,这里是 master 与 bugFix 合并的意思
# 一般就是旧的合并新的
git rebase master bugFix
# 但是也可以反过来,那就变成 master 分支在 bugFix 下面了
git rebase master bugFix
# 在第一条命令的基础上执行
git rebase master bugFix
# 可以让 master 分支也移动到 c3' 节点
现在 bugFix
分支上的工作在 master
的最顶端,同时我们也得到了一个更线性的提交序列。
注意,提交记录 C3 依然存在(树上那个半透明的节点),而 C3' 是我们 Rebase 到 master
分支上的 C3 的副本。
现在我们切换到了 master
上然后把它 rebase
到 bugFix
由于 bugFix
继承自 master
,所以 Git 只是简单的把 master
分支的引用向前移动了一下而已。
Rebase 合并流程
- 新建并切换到
bugFix
分支 - 提交一次
- 切换回
master
分支再提交一次 - 再次切换到
bugFix
分支,rebase 到master
上